🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / map / src / androidMain / kotlin / org / meshtastic / feature / map / component / EditWaypointDialog.kt
Displaying Raw • Download
feature/map/src/androidMain/kotlin/org/meshtastic/feature/map/component/EditWaypointDialog.kt 01cd54907d62cd90913d3d071b6bc240cae365ef (01cd5490) Text, 27.01 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.map.component
Tff7b72import T7ee787android.app.DatePickerDialog
Tff7b72import T7ee787android.app.TimePickerDialog
Tff7b72import T7ee787android.widget.DatePicker
Tff7b72import T7ee787android.widget.TimePicker
Tff7b72import T7ee787androidx.compose.foundation.Image
Tff7b72import T7ee787androidx.compose.foundation.background
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Column
Tff7b72import T7ee787androidx.compose.foundation.layout.ExperimentalLayoutApi
Tff7b72import T7ee787androidx.compose.foundation.layout.FlowRow
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.Spacer
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.size
Tff7b72import T7ee787androidx.compose.foundation.layout.width
Tff7b72import T7ee787androidx.compose.foundation.rememberScrollState
Tff7b72import T7ee787androidx.compose.foundation.selection.toggleable
Tff7b72import T7ee787androidx.compose.foundation.shape.CircleShape
Tff7b72import T7ee787androidx.compose.foundation.text.KeyboardActions
Tff7b72import T7ee787androidx.compose.foundation.text.KeyboardOptions
Tff7b72import T7ee787androidx.compose.foundation.verticalScroll
Tff7b72import T7ee787androidx.compose.material3.AlertDialog
Tff7b72import T7ee787androidx.compose.material3.Button
Tff7b72import T7ee787androidx.compose.material3.ExperimentalMaterial3Api
Tff7b72import T7ee787androidx.compose.material3.FilterChip
Tff7b72import T7ee787androidx.compose.material3.HorizontalDivider
Tff7b72import T7ee787androidx.compose.material3.IconButton
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.OutlinedButton
Tff7b72import T7ee787androidx.compose.material3.OutlinedTextField
Tff7b72import T7ee787androidx.compose.material3.Switch
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.material3.TextButton
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.LaunchedEffect
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.platform.LocalContext
Tff7b72import T7ee787androidx.compose.ui.semantics.Role
Tff7b72import T7ee787androidx.compose.ui.text.font.FontWeight
Tff7b72import T7ee787androidx.compose.ui.text.input.ImeAction
Tff7b72import T7ee787androidx.compose.ui.text.input.KeyboardType
Tff7b72import T7ee787androidx.compose.ui.text.style.TextAlign
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787androidx.compose.ui.unit.sp
Tff7b72import T7ee787kotlinx.datetime.LocalDate
Tff7b72import T7ee787kotlinx.datetime.Month
Tff7b72import T7ee787kotlinx.datetime.atTime
Tff7b72import T7ee787kotlinx.datetime.number
Tff7b72import T7ee787kotlinx.datetime.toInstant
Tff7b72import T7ee787kotlinx.datetime.toLocalDateTime
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.common.util.systemTimeZone
Tff7b72import T7ee787org.meshtastic.core.model.geofence.GeofenceRadiusPresets
Tff7b72import T7ee787org.meshtastic.core.model.isLocked
Tff7b72import T7ee787org.meshtastic.core.model.util.toCodePointString
Tff7b72import T7ee787org.meshtastic.core.model.util.toDistanceString
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.cancel
Tff7b72import T7ee787org.meshtastic.core.resources.date
Tff7b72import T7ee787org.meshtastic.core.resources.delete
Tff7b72import T7ee787org.meshtastic.core.resources.description
Tff7b72import T7ee787org.meshtastic.core.resources.expires
Tff7b72import T7ee787org.meshtastic.core.resources.geofence
Tff7b72import T7ee787org.meshtastic.core.resources.geofence_edit_area
Tff7b72import T7ee787org.meshtastic.core.resources.geofence_favorites_only
Tff7b72import T7ee787org.meshtastic.core.resources.geofence_notify_on_enter
Tff7b72import T7ee787org.meshtastic.core.resources.geofence_notify_on_exit
Tff7b72import T7ee787org.meshtastic.core.resources.geofence_off
Tff7b72import T7ee787org.meshtastic.core.resources.geofence_radius
Tff7b72import T7ee787org.meshtastic.core.resources.geofence_remove_area
Tff7b72import T7ee787org.meshtastic.core.resources.geofence_set_area
Tff7b72import T7ee787org.meshtastic.core.resources.locked
Tff7b72import T7ee787org.meshtastic.core.resources.name
Tff7b72import T7ee787org.meshtastic.core.resources.send
Tff7b72import T7ee787org.meshtastic.core.resources.time
Tff7b72import T7ee787org.meshtastic.core.resources.waypoint_edit
Tff7b72import T7ee787org.meshtastic.core.resources.waypoint_new
Tff7b72import T7ee787org.meshtastic.core.ui.emoji.EmojiPickerDialog
Tff7b72import T7ee787org.meshtastic.core.ui.icon.CalendarMonth
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Lock
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.proto.Config.DisplayConfig.DisplayUnits
Tff7b72import T7ee787org.meshtastic.proto.Waypoint
Tff7b72import T7ee787kotlin.time.Duration.Companion.hours
T8b949e/**
* Shared waypoint editor used by both the google and fdroid map flavors (DRY — replaces the two drifted per-flavor
* copies). Map-engine-specific concerns stay outside: drawing the box overlay and the drag-to-define gesture are
* triggered via [onBeginBoxAuthoring], which hands the current draft back to the flavor's map so the user can define
* the bounding box there; the flavor re-opens this dialog with the drawn box applied.
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4, Te6edf3ExperimentalLayoutApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffEditWaypointDialogTb4b4b4(
Te6edf3waypointTb4b4b4: Te6edf3WaypointTb4b4b4,
Te6edf3displayUnitsTb4b4b4: Te6edf3DisplayUnitsTb4b4b4,
Te6edf3myNodeNumTb4b4b4: Tffa657Int?Tb4b4b4,
Te6edf3onSendTb4b4b4: Tb4b4b4(Te6edf3WaypointTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onDeleteTb4b4b4: Tb4b4b4(Te6edf3WaypointTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onDismissRequestTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Te6edf3onBeginBoxAuthoringTb4b4b4: Tb4b4b4(Te6edf3WaypointTb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3waypointInput Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Te6edf3waypointTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3title Tff7b72= Tff7b72if Tb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3id Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3waypoint_new Tff7b72else Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3waypoint_edit
Tff7b72val Te6edf3defaultEmoji Tff7b72= T79c0ff0Te6edf3x1F4CD T8b949e// 📍 Round Pushpin
Tff7b72val Te6edf3currentEmojiCodepoint Tff7b72= Tff7b72if Tb4b4b4(Te6edf3waypointInputTb4b4b4.Te6edf3icon Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Te6edf3defaultEmoji Tff7b72else Te6edf3waypointInputTb4b4b4.Te6edf3icon
Tff7b72var Te6edf3showEmojiPickerView Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Tff7b72falseTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3context Tff7b72= Te6edf3LocalContextTb4b4b4.Te6edf3current
Tff7b72val Te6edf3tz Tff7b72= Te6edf3systemTimeZone
Tff7b72var Te6edf3selectedDateString Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4) Tb4b4b4}
Tff7b72var Te6edf3selectedTimeString Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4) Tb4b4b4}
Tff7b72var Te6edf3isExpiryEnabled Tff7b72by Te6edf3remember Tb4b4b4{
Te6edf3mutableStateOfTb4b4b4(Te6edf3waypointInputTb4b4b4.Te6edf3expire Tff7b72!Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3waypointInputTb4b4b4.Te6edf3expire Tff7b72!Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3dateFormat Tff7b72= Te6edf3remember Tb4b4b4{ Te6edf3androidTb4b4b4.Te6edf3textTb4b4b4.Te6edf3formatTb4b4b4.Te6edf3DateFormatTb4b4b4.Te6edf3getDateFormatTb4b4b4(Te6edf3contextTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3timeFormat Tff7b72= Te6edf3remember Tb4b4b4{ Te6edf3androidTb4b4b4.Te6edf3textTb4b4b4.Te6edf3formatTb4b4b4.Te6edf3DateFormatTb4b4b4.Te6edf3getTimeFormatTb4b4b4(Te6edf3contextTb4b4b4) Tb4b4b4}
Te6edf3dateFormatTb4b4b4.Te6edf3timeZone Tff7b72= Te6edf3javaTb4b4b4.Te6edf3utilTb4b4b4.Te6edf3TimeZoneTb4b4b4.Te6edf3getDefaultTb4b4b4(Tb4b4b4)
Te6edf3timeFormatTb4b4b4.Te6edf3timeZone Tff7b72= Te6edf3javaTb4b4b4.Te6edf3utilTb4b4b4.Te6edf3TimeZoneTb4b4b4.Te6edf3getDefaultTb4b4b4(Tb4b4b4)
Te6edf3LaunchedEffectTb4b4b4(Te6edf3waypointInputTb4b4b4.Te6edf3expireTb4b4b4, Te6edf3isExpiryEnabledTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3expireValue Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3expire
Tff7b72if Tb4b4b4(Te6edf3isExpiryEnabledTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3expireValue Tff7b72!Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3expireValue Tff7b72!Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3instant Tff7b72= Te6edf3kotlinTb4b4b4.Te6edf3timeTb4b4b4.Te6edf3InstantTb4b4b4.Te6edf3fromEpochSecondsTb4b4b4(Te6edf3expireValueTb4b4b4.Te6edf3toLongTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3date Tff7b72= Te6edf3javaTb4b4b4.Te6edf3utilTb4b4b4.Te6edf3DateTb4b4b4(Te6edf3instantTb4b4b4.Te6edf3toEpochMillisecondsTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3selectedDateString Tff7b72= Te6edf3dateFormatTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3dateTb4b4b4)
Te6edf3selectedTimeString Tff7b72= Te6edf3timeFormatTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3dateTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72val Te6edf3futureInstant Tff7b72= Te6edf3kotlinTb4b4b4.Te6edf3timeTb4b4b4.Te6edf3ClockTb4b4b4.Te6edf3SystemTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff8.Te6edf3hours
Tff7b72val Te6edf3date Tff7b72= Te6edf3javaTb4b4b4.Te6edf3utilTb4b4b4.Te6edf3DateTb4b4b4(Te6edf3futureInstantTb4b4b4.Te6edf3toEpochMillisecondsTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3selectedDateString Tff7b72= Te6edf3dateFormatTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3dateTb4b4b4)
Te6edf3selectedTimeString Tff7b72= Te6edf3timeFormatTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3dateTb4b4b4)
Te6edf3waypointInput Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3expire Tff7b72= Te6edf3futureInstantTb4b4b4.Te6edf3epochSecondsTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3selectedDateString Tff7b72= Ta5d6ff"Ta5d6ff"
Te6edf3selectedTimeString Tff7b72= Ta5d6ff"Ta5d6ff"
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3showEmojiPickerViewTb4b4b4) Tb4b4b4{
Te6edf3AlertDialogTb4b4b4(
Te6edf3onDismissRequest Tff7b72= Te6edf3onDismissRequestTb4b4b4,
Te6edf3title Tff7b72= Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3titleTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleLargeTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3fontWeight Tff7b72= Te6edf3FontWeightTb4b4b4.Te6edf3BoldTb4b4b4)Tb4b4b4,
Te6edf3textAlign Tff7b72= Te6edf3TextAlignTb4b4b4.Te6edf3CenterTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3text Tff7b72= Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3verticalScrollTb4b4b4(Te6edf3rememberScrollStateTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3OutlinedTextFieldTb4b4b4(
Te6edf3value Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3onValueChange Tff7b72= Tb4b4b4{ Te6edf3waypointInput Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3name Tff7b72= Tffa657itTb4b4b4.Te6edf3takeTb4b4b4(T79c0ff2T79c0ff9Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3label Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3singleLine Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3keyboardOptions Tff7b72=
Te6edf3KeyboardOptionsTb4b4b4.Te6edf3DefaultTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3keyboardType Tff7b72= Te6edf3KeyboardTypeTb4b4b4.Te6edf3TextTb4b4b4, Te6edf3imeAction Tff7b72= Te6edf3ImeActionTb4b4b4.Te6edf3NextTb4b4b4)Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3trailingIcon Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3showEmojiPickerView Tff7b72= Tff7b72true Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3currentEmojiCodepointTb4b4b4.Te6edf3toCodePointStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3modifier Tff7b72=
Te6edf3ModifierTb4b4b4.Te6edf3backgroundTb4b4b4(Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3surfaceVariantTb4b4b4, Te6edf3CircleShapeTb4b4b4)
Tb4b4b4.Te6edf3paddingTb4b4b4(T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3fontSize Tff7b72= T79c0ff2T79c0ff0.Te6edf3spTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3OutlinedTextFieldTb4b4b4(
Te6edf3value Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3descriptionTb4b4b4,
Te6edf3onValueChange Tff7b72= Tb4b4b4{ Te6edf3waypointInput Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3description Tff7b72= Tffa657itTb4b4b4.Te6edf3takeTb4b4b4(T79c0ff9T79c0ff9Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3label Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3descriptionTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3keyboardOptions Tff7b72=
Te6edf3KeyboardOptionsTb4b4b4.Te6edf3DefaultTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3keyboardType Tff7b72= Te6edf3KeyboardTypeTb4b4b4.Te6edf3TextTb4b4b4, Te6edf3imeAction Tff7b72= Te6edf3ImeActionTb4b4b4.Te6edf3DoneTb4b4b4)Tb4b4b4,
Te6edf3keyboardActions Tff7b72= Te6edf3KeyboardActionsTb4b4b4(Te6edf3onDone Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3minLines Tff7b72= T79c0ff2Tb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff3Tb4b4b4,
Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4) Tb4b4b4{
Te6edf3ImageTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3LockTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3lockedTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3lockedTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3SwitchTb4b4b4(
Te6edf3checked Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3isLockedTb4b4b4,
T8b949e// Lock to our own node so we (and only we) can later edit or remove it; unlock clears the
T8b949e// owner. locked_to must be a real node number — a placeholder locks the waypoint to a
T8b949e// phantom node and blocks even the creator (see #6343). Disabled until our node number is
T8b949e// known, since without it we can't lock a waypoint to ourselves (the toggle would silently
T8b949e// stay unlocked).
Te6edf3enabled Tff7b72= Te6edf3myNodeNum Tff7b72!Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3onCheckedChange Tff7b72= Tb4b4b4{ Te6edf3locked Tff7b72-Tff7b72>
Te6edf3waypointInput Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3locked_to Tff7b72= Tff7b72if Tb4b4b4(Te6edf3lockedTb4b4b4) Te6edf3myNodeNum Tff7b72?: T79c0ff0 Tff7b72else T79c0ff0Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4) Tb4b4b4{
Te6edf3ImageTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3CalendarMonthTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3expiresTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3expiresTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3SwitchTb4b4b4(
Te6edf3checked Tff7b72= Te6edf3isExpiryEnabledTb4b4b4,
Te6edf3onCheckedChange Tff7b72= Tb4b4b4{ Te6edf3checked Tff7b72-Tff7b72>
Te6edf3isExpiryEnabled Tff7b72= Te6edf3checked
Tff7b72if Tb4b4b4(Te6edf3checkedTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3expireValue Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3expire
Tff7b72if Tb4b4b4(Te6edf3expireValue Tff7b72=Tff7b72= T79c0ff0 Tff7b72|Tff7b72| Te6edf3expireValue Tff7b72=Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3futureInstant Tff7b72= Te6edf3kotlinTb4b4b4.Te6edf3timeTb4b4b4.Te6edf3ClockTb4b4b4.Te6edf3SystemTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff8.Te6edf3hours
Te6edf3waypointInput Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3expire Tff7b72= Te6edf3futureInstantTb4b4b4.Te6edf3epochSecondsTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3waypointInput Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3expire Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3isExpiryEnabledTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3currentInstant Tff7b72=
Tb4b4b4(Te6edf3waypointInputTb4b4b4.Te6edf3expireTb4b4b4)Tb4b4b4.Te6edf3let Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Tffa657it Tff7b72!Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4) Tb4b4b4{
Te6edf3kotlinTb4b4b4.Te6edf3timeTb4b4b4.Te6edf3InstantTb4b4b4.Te6edf3fromEpochSecondsTb4b4b4(Tffa657itTb4b4b4.Te6edf3toLongTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3kotlinTb4b4b4.Te6edf3timeTb4b4b4.Te6edf3ClockTb4b4b4.Te6edf3SystemTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff8.Te6edf3hours
Tb4b4b4}
Tb4b4b4}
Tff7b72val Te6edf3ldt Tff7b72= Te6edf3currentInstantTb4b4b4.Te6edf3toLocalDateTimeTb4b4b4(Te6edf3tzTb4b4b4)
Tff7b72val Te6edf3datePickerDialog Tff7b72=
Te6edf3DatePickerDialogTb4b4b4(
Te6edf3contextTb4b4b4,
Tb4b4b4{ Te6edf3_Tb4b4b4: Te6edf3DatePickerTb4b4b4, Te6edf3selectedYearTb4b4b4: Tffa657IntTb4b4b4, Te6edf3selectedMonthTb4b4b4: Tffa657IntTb4b4b4, Te6edf3selectedDayTb4b4b4: Tffa657Int Tff7b72-Tff7b72>
Tff7b72val Te6edf3currentLdt Tff7b72=
Tb4b4b4(Te6edf3waypointInputTb4b4b4.Te6edf3expireTb4b4b4)
Tb4b4b4.Te6edf3let Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Tffa657it Tff7b72!Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4) Tb4b4b4{
Te6edf3kotlinTb4b4b4.Te6edf3timeTb4b4b4.Te6edf3InstantTb4b4b4.Te6edf3fromEpochSecondsTb4b4b4(Tffa657itTb4b4b4.Te6edf3toLongTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3kotlinTb4b4b4.Te6edf3timeTb4b4b4.Te6edf3ClockTb4b4b4.Te6edf3SystemTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff8.Te6edf3hours
Tb4b4b4}
Tb4b4b4}
Tb4b4b4.Te6edf3toLocalDateTimeTb4b4b4(Te6edf3tzTb4b4b4)
Tff7b72val Te6edf3newLdt Tff7b72=
Te6edf3LocalDateTb4b4b4(
Te6edf3year Tff7b72= Te6edf3selectedYearTb4b4b4,
Te6edf3month Tff7b72= Te6edf3MonthTb4b4b4(Te6edf3selectedMonth Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4,
Te6edf3day Tff7b72= Te6edf3selectedDayTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3atTimeTb4b4b4(
Te6edf3hour Tff7b72= Te6edf3currentLdtTb4b4b4.Te6edf3hourTb4b4b4,
Te6edf3minute Tff7b72= Te6edf3currentLdtTb4b4b4.Te6edf3minuteTb4b4b4,
Te6edf3second Tff7b72= Te6edf3currentLdtTb4b4b4.Te6edf3secondTb4b4b4,
Te6edf3nanosecond Tff7b72= Te6edf3currentLdtTb4b4b4.Te6edf3nanosecondTb4b4b4,
Tb4b4b4)
Te6edf3waypointInput Tff7b72=
Te6edf3waypointInputTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3expire Tff7b72= Te6edf3newLdtTb4b4b4.Te6edf3toInstantTb4b4b4(Te6edf3tzTb4b4b4)Tb4b4b4.Te6edf3epochSecondsTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3ldtTb4b4b4.Te6edf3yearTb4b4b4,
Te6edf3ldtTb4b4b4.Te6edf3monthTb4b4b4.Te6edf3number Tff7b72- T79c0ff1Tb4b4b4,
Te6edf3ldtTb4b4b4.Te6edf3dayTb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3timePickerDialog Tff7b72=
Te6edf3TimePickerDialogTb4b4b4(
Te6edf3contextTb4b4b4,
Tb4b4b4{ Te6edf3_Tb4b4b4: Te6edf3TimePickerTb4b4b4, Te6edf3selectedHourTb4b4b4: Tffa657IntTb4b4b4, Te6edf3selectedMinuteTb4b4b4: Tffa657Int Tff7b72-Tff7b72>
Tff7b72val Te6edf3currentLdt Tff7b72=
Tb4b4b4(Te6edf3waypointInputTb4b4b4.Te6edf3expireTb4b4b4)
Tb4b4b4.Te6edf3let Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657it Tff7b72!Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Tffa657it Tff7b72!Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4) Tb4b4b4{
Te6edf3kotlinTb4b4b4.Te6edf3timeTb4b4b4.Te6edf3InstantTb4b4b4.Te6edf3fromEpochSecondsTb4b4b4(Tffa657itTb4b4b4.Te6edf3toLongTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3kotlinTb4b4b4.Te6edf3timeTb4b4b4.Te6edf3ClockTb4b4b4.Te6edf3SystemTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff8.Te6edf3hours
Tb4b4b4}
Tb4b4b4}
Tb4b4b4.Te6edf3toLocalDateTimeTb4b4b4(Te6edf3tzTb4b4b4)
Tff7b72val Te6edf3newLdt Tff7b72=
Te6edf3LocalDateTb4b4b4(
Te6edf3year Tff7b72= Te6edf3currentLdtTb4b4b4.Te6edf3yearTb4b4b4,
Te6edf3month Tff7b72= Te6edf3currentLdtTb4b4b4.Te6edf3monthTb4b4b4,
Te6edf3day Tff7b72= Te6edf3currentLdtTb4b4b4.Te6edf3dayTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3atTimeTb4b4b4(
Te6edf3hour Tff7b72= Te6edf3selectedHourTb4b4b4,
Te6edf3minute Tff7b72= Te6edf3selectedMinuteTb4b4b4,
Te6edf3second Tff7b72= Te6edf3currentLdtTb4b4b4.Te6edf3secondTb4b4b4,
Te6edf3nanosecond Tff7b72= Te6edf3currentLdtTb4b4b4.Te6edf3nanosecondTb4b4b4,
Tb4b4b4)
Te6edf3waypointInput Tff7b72=
Te6edf3waypointInputTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3expire Tff7b72= Te6edf3newLdtTb4b4b4.Te6edf3toInstantTb4b4b4(Te6edf3tzTb4b4b4)Tb4b4b4.Te6edf3epochSecondsTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3ldtTb4b4b4.Te6edf3hourTb4b4b4,
Te6edf3ldtTb4b4b4.Te6edf3minuteTb4b4b4,
Te6edf3androidTb4b4b4.Te6edf3textTb4b4b4.Te6edf3formatTb4b4b4.Te6edf3DateFormatTb4b4b4.Te6edf3is24HourFormatTb4b4b4(Te6edf3contextTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceEvenlyTb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4) Tb4b4b4{
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3datePickerDialogTb4b4b4.Te6edf3showTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3dateTb4b4b4)Tb4b4b4) Tb4b4b4}
Te6edf3TextTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3top Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3text Tff7b72= Te6edf3selectedDateStringTb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3ColumnTb4b4b4(Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4) Tb4b4b4{
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3timePickerDialogTb4b4b4.Te6edf3showTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3timeTb4b4b4)Tb4b4b4) Tb4b4b4}
Te6edf3TextTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3top Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3text Tff7b72= Te6edf3selectedTimeStringTb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3HorizontalDividerTb4b4b4(Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3GeofenceSectionTb4b4b4(
Te6edf3waypoint Tff7b72= Te6edf3waypointInputTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3displayUnitsTb4b4b4,
Te6edf3onWaypointChange Tff7b72= Tb4b4b4{ Te6edf3waypointInput Tff7b72= Tffa657it Tb4b4b4}Tb4b4b4,
Te6edf3onBeginBoxAuthoring Tff7b72= Tb4b4b4{ Te6edf3onBeginBoxAuthoringTb4b4b4(Te6edf3waypointInputTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3confirmButton Tff7b72= Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3start Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4, Te6edf3end Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4, Te6edf3bottom Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3EndTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3id Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3TextButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onDeleteTb4b4b4(Te6edf3waypointInputTb4b4b4) Tb4b4b4}Tb4b4b4, Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3end Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3deleteTb4b4b4)Tb4b4b4, Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3errorTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Te6edf3TextButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onDismissRequestTb4b4b4, Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3end Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3cancelTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onSendTb4b4b4(Te6edf3waypointInputTb4b4b4) Tb4b4b4}Tb4b4b4, Te6edf3enabled Tff7b72= Tb4b4b4(Te6edf3waypointInputTb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4.Te6edf3isNotBlankTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3sendTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3dismissButton Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3EmojiPickerDialogTb4b4b4(Te6edf3onDismiss Tff7b72= Tb4b4b4{ Te6edf3showEmojiPickerView Tff7b72= Tff7b72false Tb4b4b4}Tb4b4b4) Tb4b4b4{ Te6edf3selectedEmoji Tff7b72-Tff7b72>
Te6edf3showEmojiPickerView Tff7b72= Tff7b72false
Te6edf3waypointInput Tff7b72= Te6edf3waypointInputTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3icon Tff7b72= Te6edf3selectedEmojiTb4b4b4.Te6edf3codePointAtTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* Geofence authoring controls. Radius presets are locale-aware (wire value is always metres); the enter/exit toggles
* appear only once a circle or box exists, and the favorites-only toggle only once enter or exit is on.
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalLayoutApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffGeofenceSectionTb4b4b4(
Te6edf3waypointTb4b4b4: Te6edf3WaypointTb4b4b4,
Te6edf3displayUnitsTb4b4b4: Te6edf3DisplayUnitsTb4b4b4,
Te6edf3onWaypointChangeTb4b4b4: Tb4b4b4(Te6edf3WaypointTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onBeginBoxAuthoringTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3presets Tff7b72= Te6edf3rememberTb4b4b4(Te6edf3displayUnitsTb4b4b4) Tb4b4b4{ Te6edf3GeofenceRadiusPresetsTb4b4b4.Te6edf3forUnitsTb4b4b4(Te6edf3displayUnitsTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3hasBox Tff7b72= Te6edf3waypointTb4b4b4.Te6edf3bounding_box Tff7b72!Tff7b72= Tff7b72null
Tff7b72val Te6edf3hasRegion Tff7b72= Te6edf3waypointTb4b4b4.Te6edf3geofence_radius Tff7b72> T79c0ff0 Tff7b72|Tff7b72| Te6edf3hasBox
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3geofenceTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleMediumTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3fontWeight Tff7b72= Te6edf3FontWeightTb4b4b4.Te6edf3BoldTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3geofence_radiusTb4b4b4)Tb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyMediumTb4b4b4)
T8b949e// Highlight the closest preset so a radius authored on another client (e.g. an imperial/non-preset value)
T8b949e// is still shown as selected rather than appearing as "no selection" and being silently clobbered on edit.
Tff7b72val Te6edf3selectedRadius Tff7b72= Te6edf3GeofenceRadiusPresetsTb4b4b4.Te6edf3nearestTb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3geofence_radiusTb4b4b4, Te6edf3displayUnitsTb4b4b4)
Te6edf3FlowRowTb4b4b4(Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3presetsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3meters Tff7b72-Tff7b72>
Tff7b72val Te6edf3label Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3meters Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3geofence_offTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3metersTb4b4b4.Te6edf3toDistanceStringTb4b4b4(Te6edf3displayUnitsTb4b4b4)
Tb4b4b4}
Te6edf3FilterChipTb4b4b4(
Te6edf3selected Tff7b72= Te6edf3meters Tff7b72=Tff7b72= Te6edf3selectedRadiusTb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onWaypointChangeTb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3geofence_radius Tff7b72= Te6edf3metersTb4b4b4)Tb4b4b4.Te6edf3normalizeGeofenceNotificationsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3label Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3labelTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3OutlinedButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onBeginBoxAuthoringTb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Tff7b72if Tb4b4b4(Te6edf3hasBoxTb4b4b4) Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3geofence_edit_area Tff7b72else Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3geofence_set_areaTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3hasBoxTb4b4b4) Tb4b4b4{
Te6edf3TextButtonTb4b4b4(
Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onWaypointChangeTb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3bounding_box Tff7b72= Tff7b72nullTb4b4b4)Tb4b4b4.Te6edf3normalizeGeofenceNotificationsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3geofence_remove_areaTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3hasRegionTb4b4b4) Tb4b4b4{
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3GeofenceNotificationControlsTb4b4b4(Te6edf3waypoint Tff7b72= Te6edf3waypointTb4b4b4, Te6edf3onWaypointChange Tff7b72= Te6edf3onWaypointChangeTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/** Enter/exit toggles plus the favorites-only toggle (visible only once enter or exit is on). */
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffGeofenceNotificationControlsTb4b4b4(Te6edf3waypointTb4b4b4: Te6edf3WaypointTb4b4b4, Te6edf3onWaypointChangeTb4b4b4: Tb4b4b4(Te6edf3WaypointTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3GeofenceToggleRowTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3geofence_notify_on_enterTb4b4b4)Tb4b4b4,
Te6edf3checked Tff7b72= Te6edf3waypointTb4b4b4.Te6edf3notify_on_enterTb4b4b4,
Te6edf3onCheckedChange Tff7b72= Tb4b4b4{
Te6edf3onWaypointChangeTb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3notify_on_enter Tff7b72= Tffa657itTb4b4b4)Tb4b4b4.Te6edf3normalizeGeofenceNotificationsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3GeofenceToggleRowTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3geofence_notify_on_exitTb4b4b4)Tb4b4b4,
Te6edf3checked Tff7b72= Te6edf3waypointTb4b4b4.Te6edf3notify_on_exitTb4b4b4,
Te6edf3onCheckedChange Tff7b72= Tb4b4b4{ Te6edf3onWaypointChangeTb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3notify_on_exit Tff7b72= Tffa657itTb4b4b4)Tb4b4b4.Te6edf3normalizeGeofenceNotificationsTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3notify_on_enter Tff7b72|Tff7b72| Te6edf3waypointTb4b4b4.Te6edf3notify_on_exitTb4b4b4) Tb4b4b4{
Te6edf3GeofenceToggleRowTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3geofence_favorites_onlyTb4b4b4)Tb4b4b4,
Te6edf3checked Tff7b72= Te6edf3waypointTb4b4b4.Te6edf3notify_favorites_onlyTb4b4b4,
Te6edf3onCheckedChange Tff7b72= Tb4b4b4{ Te6edf3onWaypointChangeTb4b4b4(Te6edf3waypointTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3notify_favorites_only Tff7b72= Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffGeofenceToggleRowTb4b4b4(Te6edf3labelTb4b4b4: Tffa657StringTb4b4b4, Te6edf3checkedTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3onCheckedChangeTb4b4b4: Tb4b4b4(Tffa657BooleanTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
T8b949e// The whole row is one toggleable target so the label names the switch to a screen reader and the
T8b949e// tap target spans the row, not just the thumb.
Te6edf3modifier Tff7b72=
Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toggleableTb4b4b4(Te6edf3value Tff7b72= Te6edf3checkedTb4b4b4, Te6edf3role Tff7b72= Te6edf3RoleTb4b4b4.Te6edf3SwitchTb4b4b4, Te6edf3onValueChange Tff7b72= Te6edf3onCheckedChangeTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3labelTb4b4b4)
Te6edf3SwitchTb4b4b4(Te6edf3checked Tff7b72= Te6edf3checkedTb4b4b4, Te6edf3onCheckedChange Tff7b72= Tff7b72nullTb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* Clears geofence notification flags the UI can no longer expose, so stale values don't silently reappear when a region
* is added again: drop all three when no region remains, and drop favorites-only when neither enter nor exit is on.
*/
Tff7b72private Tff7b72fun Te6edf3WaypointTb4b4b4.Td2a8ffnormalizeGeofenceNotificationsTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3Waypoint Tff7b72= Tff7b72when Tb4b4b4{
Te6edf3geofence_radius Tff7b72<Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3bounding_box Tff7b72=Tff7b72= Tff7b72null Tff7b72-Tff7b72>
Te6edf3copyTb4b4b4(Te6edf3notify_on_enter Tff7b72= Tff7b72falseTb4b4b4, Te6edf3notify_on_exit Tff7b72= Tff7b72falseTb4b4b4, Te6edf3notify_favorites_only Tff7b72= Tff7b72falseTb4b4b4)
Tff7b72!Te6edf3notify_on_enter Tff7b72&Tff7b72& Tff7b72!Te6edf3notify_on_exit Tff7b72-Tff7b72> Te6edf3copyTb4b4b4(Te6edf3notify_favorites_only Tff7b72= Tff7b72falseTb4b4b4)
Tff7b72else Tff7b72-Tff7b72> Tff7b72this
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.13s